DF - Depth First 
- parcurgerea porneste de la un varf a si se cauta un varf adiacent b
- se cauta un vecin a lui b care nu a fost parcurs si asa mai departe
- se poate reveni la varful anterior

- principiul de functionare e asemenator cu back-ul

Code:

#include <fstream>
using namespace std;

ifstream F("df.in");
ofstream G("df.out");

#define Nmax 1011 

int N,M;
int Leg[Nmax][Nmax];
int Lung[Nmax];

int x,y;

void DF(int Nod,int Step)
{
	Lung[Nod]=Step;
	
	for (int i=1;i<=Leg[Nod][0];++i)
		if ( !Lung[ Leg[Nod][i] ] )
			DF(Leg[Nod][i],Step+1);
}

int main()
{
	F>>N>>M;
	for (int i=1;i<=M;++i)
	{
		F>>x>>y;
		Leg[x][++Leg[x][0]]=y;
		Leg[y][++Leg[y][0]]=x;
	}
	
	F>>x>>y;
	
	DF(x,1);
	
	G<<Lung[y]-1<<'\n';
}
